<?php
$path = 'D:/wamp/www/sender/sender/library/';
set_include_path(get_include_path() . PATH_SEPARATOR . $path);

require_once 'Zend/Date.php';
require_once 'conexao.php';
require_once 'models/configSmtpDao.php';
require_once 'models/campanhaDao.php';
require_once 'models/campanhaEnviarDao.php';
require_once 'models/emailDao.php';
require_once 'models/filaEntregaDao.php';
require_once 'models/logEnviaEmailDao.php';
require_once 'models/logEnvioDao.php';
require_once 'Zend/Mail.php';
require_once 'Zend/Mail/Transport/Smtp.php';

class ScheduleController
{
	protected $_intervaloEnvio = 0;
	protected $_qtdEmails = true;
	protected $_logEnvio_Email;
	protected $_config_smtp;
	protected $_campanhaEnviar;
	protected $_email;
	protected $_logEnvio;
	protected $_dataHoraAtual;

    public function init()
    {
        // Models
        $this->_config_smtp = new Application_Model_ConfigSmtp();
        $this->_campanhaEnviar = new Application_Model_Campanhaenviar();
        $this->_filaEntrega = new Application_Model_FilaEntrega();
        $this->_email = new Application_Model_Email();
        $this->_campanha = new Application_Model_Campanha();
        $this->_dataHoraAtual = new Zend_Date();
        $this->_logEnvio = new Application_Model_Logenvio();
        $this->_logEnvio_Email = new Application_Model_LogEnviaEmail();
        print(">>Processo de envio de e-mails iniciado \n");
    }

    public function indexAction()
    {
    	try{
	    	$dados = $this->_config_smtp->listaAllContaAtiva();
	    	$enviando = $this->_campanhaEnviar->envioDeCampanhaAtivo();
	    	$this->_intervaloEnvio =(int) ceil((60/$dados['envioPorHora']));
	    	 
	    	if($enviando!=FALSE){
	    		$log = '['.date('H:i:s').'] existe campanha sendo enviada...';
	    		$this->_logEnvio->addlog($enviando['idcampanha'], $log);
	    		print $log;	    			
	    		exit();
	    	}
	    	$listaRecuperaSenha = $this->_logEnvio_Email->findEmailEnviar();
	        $campanhaParaEnviar = $this->_campanhaEnviar->listaAllCampanhaParaEnviar();
	        //envia email para recuperar senha se existir
	        if($listaRecuperaSenha!=false){
	        	print "	-> Existe e-mail de recuperacao de senha a ser enviado para [".$listaRecuperaSenha['email']."] \n";
	        	$config = array("auth" =>"login", 
	        				"username" => $dados['conta'], 
	        				"password" => $dados['senha'], 
	        				"ssl" => $dados['ssl'], 
	        				"port" => $dados['porta']);	        	
		        $transport = new Zend_Mail_Transport_Smtp($dados['smtp'], $config);
		        
		        $email_from = $dados['conta'];
		        $name_from = $dados['conta'];
		        $email_to = $listaRecuperaSenha['email'];
				$mail = new Zend_Mail('UTF-8');
				$mail->setFrom($email_from, $name_from);
				$mail->addTo($email_to);
				$mail->setSubject('Sender [Recuperar senha]');
				$mail->setBodyHtml($listaRecuperaSenha['mensagem']);
				$mail->send($transport);
                $this->_logEnvio_Email->inactiveLogEnviaEmailByIdUser($listaRecuperaSenha['idusuario']);
                print "	->E-mail de recuperacao de senha enviado com sucesso! \n";
               		        

	        }
	        if($campanhaParaEnviar==false){
	        	print("	->Nao possui campanha para ser enviada \n");
	        	exit();
	        }
	        
	        $config = array('auth' =>'login', 
	        				'username' => $dados['conta'], 
	        				'password' => $dados['senha'], 
	        				'ssl' => $dados['ssl'], 
	        				'port' => $dados['porta']);
	        
	        $transport = new Zend_Mail_Transport_Smtp($dados['smtp'], $config);
	        
	        $email_from = $campanhaParaEnviar['remetente'];
	        $name_from = $campanhaParaEnviar['remetente'];
	        //Alterando status das campanhas para enviando
	        $this->_campanha->updateStatus(2, $campanhaParaEnviar['idcampanha']);
	        $this->_campanhaEnviar->updateStatus(2, $campanhaParaEnviar['idcampanha_enviar']);
	        
	        
	        while ($this->_qtdEmails != false)
	        {
		        $listaEmails = $this->_email->selecionaEmailsParaEnviar($campanhaParaEnviar['idcampanha']);		        
		        $this->_qtdEmails = $listaEmails;
		        $linkOptout = 'http://sender.localhost/default/index/optout/tk/'.$listaEmails['token'];
		        if($listaEmails != false){
						$log="";
			            $email_to = $listaEmails['email'];
				        $mail = new Zend_Mail('UTF-8');
				        $mail->setFrom($email_from, $name_from);
				        $mail->addTo($email_to);
				        $mail->setSubject($campanhaParaEnviar['assunto']);
				        $mail->setBodyHtml(str_replace('##LINK_OPTOUT##',$linkOptout,$campanhaParaEnviar['html']));
				        try{				        				        
				        	$mail->send($transport);
				        }catch (Zend_Mail_Exception $e)
				        {
				        	$log = $e;
				        	$this->_logEnvio->addlog($campanhaParaEnviar['idcampanha'], $log);
				        }
				        $this->_filaEntrega->marcarEmailComoEnviado($listaEmails['idemail'],$listaEmails['idfila_entrega']);
				        $horaenvio = date('H:i:s');
				        $log .= '['.$horaenvio.'] Campanha '.$campanhaParaEnviar['nome'].' enviada com sucesso para '.$listaEmails['email'].'</br>';
				        print ">>".$log." \n";
				        sleep($this->_intervaloEnvio);
			   }
	        }
	        $this->_logEnvio->addlog($campanhaParaEnviar['idcampanha'], $log);
	        $this->_campanha->updateStatus(3, $campanhaParaEnviar['idcampanha']);
	        $this->_campanhaEnviar->updateStatus(3, $campanhaParaEnviar['idcampanha_enviar']);
	        print ">>Processo de envio de campanha finalizada \n";
	        
    	}catch (Zend_Db_Exception $e) {
    			$log = $e;
            	$this->_logEnvio->addlog($campanhaParaEnviar['idcampanha'], $log);
            	
    	}
    }
}
$obj = new ScheduleController();
$obj->init();
$obj->indexAction();
?>
